using System;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using FEL.BOD;
using HER;
using FEL.COM;

public partial class BOD_BOD_MOVIMIENTO : KPagina
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ddlBod_Bodega.DataSource = ConsultarBodegas();
            ddlBod_Bodega.DataBind();
            txbFechaInicio.Text = DateTime.Now.Subtract(new TimeSpan(30,0,0,0)).ToShortDateString();
            txbFechaFin.Text = DateTime.Now.ToShortDateString();
            RefrescarGrids();
        }

        //el mismos manejador de evento pq tienen la misma funcionalidad
        btnRefrescar.Click += new EventHandler(Refrescar_Event);
        ddlBod_Bodega.SelectedIndexChanged += new EventHandler(Refrescar_Event);
        txbFechaFin.TextChanged += new EventHandler(Refrescar_Event);
        txbFechaInicio.TextChanged += new EventHandler(Refrescar_Event);
    }

    protected void ctvFiltro_ServerValidation(object sender, ServerValidateEventArgs args)
    {
        GridViewRow gvrRow = (GridViewRow)(((Control)sender).BindingContainer);
        GridView grvGrid = (GridView)gvrRow.NamingContainer;
        codigo = ((TextBox)gvrRow.FindControl("txbFiltro")).Text;
        args.IsValid = false;
        pagina = grvGrid.DataKeys[gvrRow.RowIndex].Values["Dic_Contenedor_Nombre"].ToString();
        if (codigo == string.Empty)
        {
            args.IsValid = true;
            return;
        }
        id = ObtenerId(pagina, codigo);
        if (id != null)
            args.IsValid = true;
    }

    private string id = string.Empty;
    private string codigo = string.Empty;
    private string pagina = string.Empty;


    protected List<Bod_Bodega> ConsultarBodegas()
    {
        FEL.BOD.BO_Bod_Bodega boBodBodega = new BO_Bod_Bodega();
        try
        {
            return boBodBodega.GetByLikeNombre("Nombre", (Scope) Session["Scope"], "%");
        }
        catch
        {
            return new List<Bod_Bodega>();
        }
    }

    void RefrescarGrids()
    {
        grvBod_Movimineto_ING.DataSource = ConsultarMovimientoPorTipo("ING");
        grvBod_Movimineto_ING.DataBind();
        grvBod_Movimineto_EGR.DataSource = ConsultarMovimientoPorTipo("EGR");
        grvBod_Movimineto_EGR.DataBind();
        grvBod_Movimineto_CON.DataSource = ConsultarMovimientoPorTipo("CON");
        grvBod_Movimineto_CON.DataBind();
    }

    void Refrescar_Event(object sender, EventArgs e)
    {
        RefrescarGrids();
    }

    private List<Bod_Movimiento> _lstBodMovimiento = null;

    protected bool ConsultarMovimientos()
    {
        if(_lstBodMovimiento != null) return true;
        FEL.BOD.BO_Bod_Movimiento boBodMovimiento = new BO_Bod_Movimiento();
        List<Bod_Movimiento> lstBodMovimiento = new List<Bod_Movimiento>();
        try
        {
            _lstBodMovimiento = boBodMovimiento.Get("Nombre", (Scope)Session["Scope"], ddlBod_Bodega.SelectedValue,
                Convert.ToDateTime(txbFechaInicio.Text), Convert.ToDateTime(txbFechaFin.Text));
            return true;
        }
        catch
        {
            return false;
        }
    }
    protected List<Bod_Movimiento> ConsultarMovimientoPorTipo(string tipo)
    {
        List<Bod_Movimiento> lstMoviminetosPorTipo = new List<Bod_Movimiento>();
        if (ConsultarMovimientos())
        {
            for (int indice = 0; indice < _lstBodMovimiento.Count; indice++)
            {
                if (tipo == _lstBodMovimiento[indice].Tipo)
                    lstMoviminetosPorTipo.Add(_lstBodMovimiento[indice]);
            }
        }
        return lstMoviminetosPorTipo;
    }

    
    protected void btnFiltro_Click(object sender, EventArgs e)
    {
        if (IsValid)
        {
            if (codigo == string.Empty)
                Response.Redirect(pagina);

            string nombreContenedor = ObtenerNombreContenedor(pagina);
            Response.Redirect(pagina + "?" + nombreContenedor + "_ID=" + id);
        }
    }

    private string ObtenerNombreContenedor(string urlPagina)
    {
        int indicePunto = urlPagina.LastIndexOf(".");
        int indiceBackSlash = urlPagina.LastIndexOf(@"\");
        return urlPagina.Substring(indiceBackSlash + 1, indicePunto - indiceBackSlash - 1).ToUpper();
    }

    private string ObtenerId (string nombreContenedor, string codigo)
    {
        switch(nombreContenedor)
        {
            case @"~\BOD\BOD_ALTA.aspx":
                FEL.BOD.BO_Bod_Alta bo_Bod_Alta = new BO_Bod_Alta();
                List<Bod_Alta> lstBod_Alta = new List<Bod_Alta>();
                try
                {
                    lstBod_Alta = bo_Bod_Alta.GetByCodigo("", (Scope) Session["Scope"], codigo);
                }
                catch{
                    return null;}
                return (lstBod_Alta.Count == 0) ? null : lstBod_Alta[0].Id;

            case @"~\BOD\BOD_BAJA.aspx":
                FEL.BOD.BO_Bod_Baja bo_Bod_Baja = new BO_Bod_Baja();
                List<Bod_Baja> lstBod_Baja = new List<Bod_Baja>();
                try
                {
                    lstBod_Baja = bo_Bod_Baja.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstBod_Baja.Count == 0) ? null : lstBod_Baja[0].Id;

            case @"~\BOD\BOD_CONTEO_FISICO.aspx":
                FEL.BOD.BO_Bod_Conteo_Fisico bo_Bod_Conteo_Fisico = new BO_Bod_Conteo_Fisico();
                List<Bod_Conteo_Fisico> lstBod_Conteo_Fisico = new List<Bod_Conteo_Fisico>();
                try
                {
                    lstBod_Conteo_Fisico = bo_Bod_Conteo_Fisico.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstBod_Conteo_Fisico.Count == 0) ? null : lstBod_Conteo_Fisico[0].Id;

            case @"~\BOD\BOD_TRANSFERENCIA_DESPACHO.aspx":
                FEL.BOD.BO_Bod_Transferencia_Despacho bo_Bod_Transferencia_Despacho = new BO_Bod_Transferencia_Despacho();
                List<Bod_Transferencia_Despacho> lstBod_Transferencia_Despacho = new List<Bod_Transferencia_Despacho>();
                try
                {
                    lstBod_Transferencia_Despacho = bo_Bod_Transferencia_Despacho.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstBod_Transferencia_Despacho.Count == 0) ? null : lstBod_Transferencia_Despacho[0].Id;
            
            case @"~\BOD\BOD_TRANSFERENCIA_RECEPCION.aspx":
                FEL.BOD.BO_Bod_Transferencia_Recepcion bo_Bod_Transferencia_Recepcion = new BO_Bod_Transferencia_Recepcion();
                List<Bod_Transferencia_Recepcion> lstBod_Transferencia_Recepcion = new List<Bod_Transferencia_Recepcion>();
                try
                {
                    lstBod_Transferencia_Recepcion = bo_Bod_Transferencia_Recepcion.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstBod_Transferencia_Recepcion.Count == 0) ? null : lstBod_Transferencia_Recepcion[0].Id;

            case @"~\COM\COM_DEVOLUCION_DONACION_EGR.aspx":
                FEL.COM.BO_Com_Devolucion_Donacion_Egr bo_Com_Devolucion_Donacion_Egr = new BO_Com_Devolucion_Donacion_Egr();
                List<Com_Devolucion_Donacion_Egr> lstCom_Devolucion_Donacion_Egr = new List<Com_Devolucion_Donacion_Egr>();
                try
                {
                    lstCom_Devolucion_Donacion_Egr = bo_Com_Devolucion_Donacion_Egr.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstCom_Devolucion_Donacion_Egr.Count == 0) ? null : lstCom_Devolucion_Donacion_Egr[0].Id;

            case @"~\COM\COM_DEVOLUCION_DONACION_ING.aspx":
                FEL.COM.BO_Com_Devolucion_Donacion_Ing bo_Com_Devolucion_Donacion_Ing = new BO_Com_Devolucion_Donacion_Ing();
                List<Com_Devolucion_Donacion_Ing> lstCom_Devolucion_Donacion_Ing = new List<Com_Devolucion_Donacion_Ing>();
                try
                {
                    lstCom_Devolucion_Donacion_Ing = bo_Com_Devolucion_Donacion_Ing.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstCom_Devolucion_Donacion_Ing.Count == 0) ? null : lstCom_Devolucion_Donacion_Ing[0].Id;

            case @"~\COM\COM_DEVOLUCION_PRESTAMO_EGR.aspx":
                FEL.COM.BO_Com_Devolucion_Prestamo_Egr bo_Com_Devolucion_Prestamo_Egr = new BO_Com_Devolucion_Prestamo_Egr();
                List<Com_Devolucion_Prestamo_Egr> lstCom_Devolucion_Prestamo_Egr = new List<Com_Devolucion_Prestamo_Egr>();
                try
                {
                    lstCom_Devolucion_Prestamo_Egr = bo_Com_Devolucion_Prestamo_Egr.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstCom_Devolucion_Prestamo_Egr.Count == 0) ? null : lstCom_Devolucion_Prestamo_Egr[0].Id;


            case @"~\COM\COM_DEVOLUCION_PRESTAMO_ING.aspx":
                FEL.COM.BO_Com_Devolucion_Prestamo_Ing bo_Com_Devolucion_Prestamo_Ing = new BO_Com_Devolucion_Prestamo_Ing();
                List<Com_Devolucion_Prestamo_Ing> lstCom_Devolucion_Prestamo_Ing = new List<Com_Devolucion_Prestamo_Ing>();
                try
                {
                    lstCom_Devolucion_Prestamo_Ing = bo_Com_Devolucion_Prestamo_Ing.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstCom_Devolucion_Prestamo_Ing.Count == 0) ? null : lstCom_Devolucion_Prestamo_Ing[0].Id;

            case @"~\COM\COM_DONACION_EGR.aspx":
                FEL.COM.BO_Com_Donacion_Egr bo_Com_Donacion_Egr = new BO_Com_Donacion_Egr();
                List<Com_Donacion_Egr> lstCom_Donacion_Egr = new List<Com_Donacion_Egr>();
                try
                {
                    lstCom_Donacion_Egr = bo_Com_Donacion_Egr.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstCom_Donacion_Egr.Count == 0) ? null : lstCom_Donacion_Egr[0].Id;

            case @"~\COM\COM_DONACION_ING.aspx":
                FEL.COM.BO_Com_Donacion_Ing bo_Com_Donacion_Ing = new BO_Com_Donacion_Ing();
                List<Com_Donacion_Ing> lstCom_Donacion_Ing = new List<Com_Donacion_Ing>();
                try
                {
                    lstCom_Donacion_Ing = bo_Com_Donacion_Ing.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstCom_Donacion_Ing.Count == 0) ? null : lstCom_Donacion_Ing[0].Id;
            case @"~\COM\COM_PRESTAMO_EGR.aspx":
                FEL.COM.BO_Com_Prestamo_Egr bo_Com_Prestamo_Egr = new BO_Com_Prestamo_Egr();
                List<Com_Prestamo_Egr> lstCom_Prestamo_Egr = new List<Com_Prestamo_Egr>();
                try
                {
                    lstCom_Prestamo_Egr = bo_Com_Prestamo_Egr.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstCom_Prestamo_Egr.Count == 0) ? null : lstCom_Prestamo_Egr[0].Id;

            case @"~\COM\COM_PRESTAMO_ING.aspx":
                FEL.COM.BO_Com_Prestamo_Ing bo_Com_Prestamo_Ing = new BO_Com_Prestamo_Ing();
                List<Com_Prestamo_Ing> lstCom_Prestamo_Ing = new List<Com_Prestamo_Ing>();
                try
                {
                    lstCom_Prestamo_Ing = bo_Com_Prestamo_Ing.GetByCodigo("", (Scope)Session["Scope"], codigo);
                }
                catch
                {
                    return null;
                }
                return (lstCom_Prestamo_Ing.Count == 0) ? null : lstCom_Prestamo_Ing[0].Id;

            default:
                return null;

        }
    }

    
}
